/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package colloque.forms;


import colloque.Utilisateur;
import colloque.helpers.UtilisateurHelper;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;

/**
 *
 * @author James
 */
public class ConnexionForm {


    private static final String CHAMP_EMAIL  = "email";
    private static final String CHAMP_PASS   = "motdepasse";
    private static final String REQUETE_UTILISATEUR   = "requete_utilisateur";

    private String              resultat;
    private Map<String, String> erreurs      = new HashMap<String, String>();

    /**
     * 
     * @return
     */
    public String getResultat() {
        return resultat;
    }

    /**
     *
     * @return
     */
    public Map<String, String> getErreurs() {
        return erreurs;
    }

    /**
     * Connecte un utilisateur en session 
     * 
     * @param request
     * @return
     */
    public Utilisateur connecterUtilisateur( HttpServletRequest request ) {
        /* Récupération des champs du formulaire */
        String email = getValeurChamp( request, CHAMP_EMAIL );
        String motDePasse = getValeurChamp( request, CHAMP_PASS );
        
        UtilisateurHelper utilisateurhelper = new UtilisateurHelper();
        Utilisateur utilisateur = new Utilisateur();

        try {
            utilisateur = utilisateurhelper.getUtilisateurByCourrielAndPassword(email, motDePasse);
        } 
        catch(Exception e) {
            setErreur(REQUETE_UTILISATEUR, e.getMessage());
        }
        
        /* Validation du champ email. */
        try {
            validationEmail( email );
        } catch ( Exception e ) {
            setErreur(CHAMP_EMAIL, e.getMessage());
        }

        /* Validation du champ mot de passe. */
        try {
            validationMotDePasse( motDePasse );
        } catch ( Exception e ) {
            setErreur(CHAMP_PASS, e.getMessage());
        }

        /* Initialisation du résultat global de la validation. */
        if ( erreurs.isEmpty() ) {
            resultat = "Succès de la connexion.";
        } else {
            resultat = "Échec de la connexion.";
        }

        return utilisateur;
    }

    /**
     * Valide l'adresse email saisie.
     */
    private void validationEmail( String email ) throws Exception {
        if ( email != null && !email.matches( "([^.@]+)(\\.[^.@]+)*@([^.@]+\\.)+([^.@]+)" ) ) {
            throw new Exception( "Merci de saisir une adresse mail valide." );
        }
    }

    /**
     * Valide le mot de passe saisi.
     */
    private void validationMotDePasse( String motDePasse ) throws Exception {
        if ( motDePasse != null ) {
            if ( motDePasse.length() < 3 ) {
                throw new Exception( "Le mot de passe doit contenir au moins 3 caractères." );
            }
        } else {
            throw new Exception( "Merci de saisir votre mot de passe." );
        }
    }

    /*
     * Ajoute un message correspondant au champ spécifié à la map des erreurs.
     */
    private void setErreur( String champ, String message ) {
        erreurs.put( champ, message );
    }

    /*
     * Méthode utilitaire qui retourne null si un champ est vide, et son contenu
     * sinon.
     */
    private static String getValeurChamp( HttpServletRequest request, String nomChamp ) {
        String valeur = request.getParameter( nomChamp );
        if ( valeur == null || valeur.trim().length() == 0 ) {
            return null;
        } else {
            return valeur;
        }
    }
}

